
import taichi as ti
 
# from sys import excepthook
import taichi as ti
ti.init(
    arch=ti.cuda,
    debug=True,                     #可以打开调试模式
    excepthook = True,              #调用堆栈回溯  配合static_assert使用
    cpu_max_num_threads = 1,        #强行开启单线程CPU模式    
    advanced_optimization = False,  #高级优化选项  可能跳过一些程序认为的无用代码
    )     


A = ti.Matrix([[1,2],[3,4],[5,6],[7,8]])


@ti.kernel
def foo(): 
    print('dife')           #极耗性能
    ti.static_print(A.n)    #不耗性能

@ti.kernel
def bar(): 
    assert (A[9,9] > 0 )                            #手动添加调试用断言 debug开启时才有用   全部inline 直会导出最外层的出错行数
    ti.static_assert(A[0,0] == A[1,0],"not equal")  #添加调试用断言  不耗性能 可以进入嵌套调用查询查询
 

#大矩阵可以使用GUI来可视化来调试
x = ti.field(ti.f32,(256,256)) 
@ti.kernel
def fee():
    for i,j in x:
        x[i,j] = (i+j)/512.0

fee()
gui = ti.GUI('Debug',(256,256))
while gui.running:
    gui.set_image(x)
    gui.show()



#全拷贝
a = ti.field(ti.f32,shape = 16)
b = ti.field(ti.f32,shape = 16)
@ti.kernel
def add():
    for i in range(1,16):
        b[i] += a[i-1]

b.copy_from(a)
add()
a.copy_from(b)








